
import datetime 

####SIGECON
from repositories.sigecon.consulta import TipoConsultaCondicionRepository, \
     TipoConsultaRepository, SubtipoConsultaRepository, RespuestaRepository, \
     ConsultaRepository, TipoConsultaSubtipoConsultaRepository, \
     ConsultaHistoryRepository
from repositories.sigecon.mails import BandejaEntradaRepository, \
    MailConsultaRepository, MailRespuestaRepository
from repositories.sigecon.usuario import AuthRepository, SectorRepository
from repositories.sigecon.comunicacion import CondicionRepository, \
     ModalidadRepository, ComunicacionRepository
####COMUNES
from repositories.comunes.domicilio import ProvinciaRepository, \
     LocalidadRepository, DepartamentoRepository, BarrioRepository
from repositories.comunes.tipodocumento import TipoDocumentoRepository
from repositories.comunes.estadocivil import EstadoCivilRepository
####AFILIACIONES
from repositories.afiliaciones.afiliado import AfiliadoRepository
from repositories.afiliaciones.establecimiento import EstablecimientoCabeceraRepository


################################################################################################
#DATOS COMUNES
################################################################################################

departamentos = DepartamentoRepository(dbDatosComunes, T)
departamentos.define_table(migrate = False)

localidades = LocalidadRepository(dbDatosComunes, T)
localidades.define_table(migrate = False)

provincias = ProvinciaRepository(dbDatosComunes, T)
provincias.define_table(migrate = False)

barrios = BarrioRepository(dbDatosComunes, T)
barrios.define_table(migrate = False)

tipos_doc = TipoDocumentoRepository(dbDatosComunes, T)
tipos_doc.define_table(migrate = False)

estados_civil = EstadoCivilRepository(dbDatosComunes, T)
estados_civil.define_table(migrate = False)


################################################################################################
#GESTION CONSULTAS
################################################################################################

sectores = SectorRepository(dbSIGECON, T)
sectores.define_table(migrate = True)

auth = AuthRepository(dbSIGECON, T)
auth.define_tables(migrate = True)  

condiciones = CondicionRepository(dbSIGECON, T)
condiciones.define_table(migrate = True)

modalidades = ModalidadRepository(dbSIGECON, T)
modalidades.define_table(migrate = True)
     
comunicaciones = ComunicacionRepository(dbSIGECON, dbDatosComunes, auth, T)
comunicaciones.define_table(migrate = True)

tipos = TipoConsultaRepository(dbSIGECON, T)
tipos.define_table(migrate = True)

subtipos = SubtipoConsultaRepository(dbSIGECON, T)
subtipos.define_table(migrate = True)

respuestas = RespuestaRepository(dbSIGECON, T)
respuestas.define_table(migrate = True)

rel_tipo_condicion = TipoConsultaCondicionRepository(dbSIGECON, T)
rel_tipo_condicion.define_table(migrate = True)

rel_tipo_subtipo = TipoConsultaSubtipoConsultaRepository(dbSIGECON, T)
rel_tipo_subtipo.define_table(migrate = True)

consultas = ConsultaRepository(dbSIGECON, auth, T)
consultas.define_table(migrate = True)

consultas_archive = ConsultaHistoryRepository(dbSIGECON, T)
consultas_archive.define_table(migrate = True)

bandeja_mails = BandejaEntradaRepository(dbSIGECON, T)
bandeja_mails.define_table(migrate = True)

mails_consulta = MailConsultaRepository(dbSIGECON, T)
mails_consulta.define_table(migrate = True)

mails_respuesta = MailRespuestaRepository(dbSIGECON, T)
mails_respuesta.define_table(migrate = True)


########################################################################
# AFILIACIONES
########################################################################


afiliados = AfiliadoRepository(dbAfiliaciones, dbDatosComunes, T)
afiliados.define_table(migrate = False)

establecimientos = EstablecimientoCabeceraRepository(dbAfiliaciones, T)
establecimientos.define_table(migrate = False)












##QUITADAS POR AHORA
########################################################################
#dbSIGECON.define_table('EstadosSupervision'
#,Field('descripcion', 'string', length = 250, required = True, notnull = True)
#,migrate = False
#)


########################################################################

#dbSIGECON.define_table('MailsRespuesta'
#,Field('mail_consulta', 'integer')
#,Field('creado_en', type = 'datetime', default = datetime.datetime.now(), update = datetime.datetime.now(), writable = False, readable = False)
#,Field('usuario', type = 'integer', default = auth.user_id, writable = False, readable = False, required = True)
#,Field('respuesta', 'string', length = 1000, required = True)
#,Field('remitente', 'string', length = 50, required = True)
#,migrate = False
#)

#dbSIGECON.MailsRespuesta.ID_Usuario.represent =  lambda id: dbAdmin.auth_user(id).first_name if id > 0 else ""

########################################################################

#dbSIGECON.define_table('MailsConsulta'
#,Field('consulta', 'integer')
#,Field('creado_en', type = 'datetime', default = datetime.datetime.now(), update = datetime.datetime.now(), writable = False, readable = False)
#,Field('remitente', 'string', length = 50, required = True)
#,Field('consulta', type = 'text', required = True)
#,migrate = False
#)



########################################################################

#dbSIGECON.define_table('Supervisiones'
#,Field('consulta', 'integer')
#,Field('creado_en', type = 'datetime', default = datetime.datetime.now(), update = datetime.datetime.now(), writable = False, readable = False)
#,Field('usuario', type = 'integer', default = auth.user_id, writable = False, readable = False, required = True)
#,Field('estado', type = 'integer')
#,Field('comentario', type = 'text', required = True)
#,migrate = False
#)

#dbSIGECON.Supervisiones.FechaHora.represent = lambda fecha: fecha.strftime("%d/%m/%Y %H:%M")
#
#dbSIGECON.Supervisiones.ID_EstadoSupervision.requires = IS_IN_DB(dbSIGECON, dbSIGECON.EstadosSupervision.id, '%(Descripcion)s')
#dbSIGECON.Supervisiones.ID_Usuario.requires = IS_IN_DB(dbAdmin, dbAdmin.auth_user.id, '%(username)s')
#
#dbSIGECON.Supervisiones.ID_Usuario.represent =  lambda id: dbAdmin.auth_user(id).first_name if id > 0 else ""
#
#dbSIGECON.Supervisiones.ID_EstadoSupervision.represent = lambda id: dbSIGECON.EstadosSupervision(id).Descripcion if id > 0 else "No iniciado"

########################################################################

#dbSIGECON.define_table('Bloqueos'
#,Field('consulta', dbSIGECON.Consultas)
#,Field('creado_en', type = 'datetime', default = datetime.datetime.now(), update = datetime.datetime.now(), writable = False, readable = False)
#,Field('usuario', type = 'integer', default = auth.user_id, writable = False, readable = False, required = True)
#,Field('nombrePC', 'string', length = 50, required = True)
#,migrate = False
#)


########################################################################

#dbSIGECON.define_table('LlamadosTelefonica',
#    Field('IDEVENTOS'),
#        Field('FECHA', 'datetime', length = 8),
#    Field('HORA'),
#    Field('DISCADO'),
#    Field('ORIGEN'),
#    Field('DESTINO'),
#    Field('NOMBRE'),
#    Field('DURACION'),
#    Field('ID_LOCU'),
#    Field('X1X2X3'),
#    migrate = False
#)

#dbSIGECON.LlamadosTelefonica.FECHA.represent = lambda fecha: fecha.strftime("%d/%m/%y")

########################################################################

#dbSIGECON.define_table('LlamadosTelefonicaPrueba',
#    Field('IDEVENTOS'),
#    Field('FECHA', 'datetime'),
#    Field('HORA'),
#    Field('DISCADO'),
#    Field('ORIGEN'),
#    Field('DESTINO'),
#    Field('NOMBRE'),
#    Field('DURACION'),
#    Field('ID_LOCU'),
#    migrate = True
#)

#dbSIGECON.LlamadosTelefonicaPrueba.FECHA.represent = lambda fecha: fecha.strftime("%d/%m/%Y")


########################################################################
# DATOS OSP
########################################################################

#dbDatosComunesOSP.define_table('CodEstadoCivil'
#,Field('Descripcion', 'string', length = 50, required = True)
#,migrate = False
#)
#
#dbDatosComunesOSP.define_table('CodTipoDocumento'
#,Field('Descripcion', 'string', length = 50, required = True)
#,migrate = False
#)
#
#dbDatosOSP.define_table('Titulares'
#,migrate = False
#)
#
#dbDatosOSP.define_table('Familiares'
#,Field('IDTitular')
#,Field('IDParentesco')
#,migrate = False
#)
#
#from dateutil import parser
#from dateutil.parser import *
#
#dbDatosOSP.define_table('MotivoBaja'
#,Field('Descripcion')
#,migrate = False
#)
#
##{ Planes por titular
#
#dbDatosOSP.define_table('PlanPasivoXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanPasivoXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanActivoXTitular'
#,Field('IDTitular', 'integer', required = True)
#,Field('IDTipoPlan', 'integer', required = True)
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanActivoXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanAdherenteXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanAdherenteXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanMonotributistaXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanMonotributistaXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanVoluntarioXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanVoluntarioXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanAltasSSSXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanAltasSSSXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanJubiladoTramiteXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanJubiladoTramiteXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanBajasOpcionXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanBajasOpcionXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#dbDatosOSP.define_table('PlanServicioDomesticoXTitular'
#,Field('IDTitular', 'integer')
#,Field('IDTipoPlan', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDTitular']
#,migrate = False
#)
#dbDatosOSP.PlanServicioDomesticoXTitular.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#    
##{ Planes por familiar
#
#dbDatosOSP.define_table('PlanActivoXFamiliar'
#,Field('IDFamiliar', 'integer')
#,Field('IDTitular', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDFamiliar']
#,migrate = False
#)
#dbDatosOSP.PlanActivoXFamiliar.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#dbDatosOSP.define_table('PlanPasivoXFamiliar'
#,Field('IDFamiliar', 'integer')
#,Field('IDTitular', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDFamiliar']
#,migrate = False
#)
#dbDatosOSP.PlanPasivoXFamiliar.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#dbDatosOSP.define_table('PlanAdherenteXFamiliar'
#,Field('IDFamiliar', 'integer')
#,Field('IDTitular', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDFamiliar']
#,migrate = False
#)
#dbDatosOSP.PlanAdherenteXFamiliar.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanVoluntarioXFamiliar'
#,Field('IDFamiliar', 'integer')
#,Field('IDTitular', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDFamiliar']
#,migrate = False
#)
#dbDatosOSP.PlanVoluntarioXFamiliar.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#dbDatosOSP.define_table('PlanMonotributistaXFamiliar'
#,Field('IDFamiliar', 'integer')
#,Field('IDTitular', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDFamiliar']
#,migrate = False
#)
#dbDatosOSP.PlanMonotributistaXFamiliar.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanServicioDomesticoXFamiliar'
#,Field('IDFamiliar', 'integer')
#,Field('IDTitular', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDFamiliar']
#,migrate = False
#)
#dbDatosOSP.PlanServicioDomesticoXFamiliar.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"
#
#
#dbDatosOSP.define_table('PlanJubiladoTramiteXFamiliar'
#,Field('IDFamiliar', 'integer')
#,Field('IDTitular', 'integer')
#,Field('FechaBaja', 'datetime')
#,Field('IDMotivoBaja', 'integer')
#,primarykey=['IDFamiliar']
#,migrate = False
#)
#
#dbDatosOSP.PlanJubiladoTramiteXFamiliar.IDMotivoBaja.represent = lambda id: dbDatosOSP.MotivoBaja(id).Descripcion if id > 0 else "No se encontro motivo"



#sexos tal cual tabla afiliaciones
#SEXOS = {
#    '1' : 'Masculino',
#    '0' : 'Femenino'
#}
#
#TIPOSCONSULTANTES = {
#    '1' : 'Afiliado',
#    '2' : 'No Afiliado',
#    '3' : 'Empleador',
#    '4' : 'Prestador'
#}
#RESPUESTAS = {
#    '1' : 'Se brindo la informacion solicitada',
#    '2' : 'Pendiente respuesta',
#    '3' : 'Se derivo al sector correspondiente'
#}
